<?php

namespace App\Traits;

use Symfony\Component\HttpFoundation\Response;

trait ResponseTrait
{
    /**
     * 操作成功返回的数据
     *
     * @param string $message 提示信息
     * @param mixed $data 要返回的数据
     * @param int $code 错误码，默认为1
     * @param array $header 发送的 Header 信息
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function success($message = '', $data = null, $code = 1, array $header = [])
    {
        return $this->result($message, $data, $code, $header);
    }

    /**
     * 操作失败返回的数据
     *
     * @param string $message 提示信息
     * @param mixed $data 要返回的数据
     * @param int $code 错误码，默认为0
     * @param array $header 发送的 Header 信息
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function failure($message = '', $data = null, $code = 0, array $header = [])
    {
        return $this->result($message, $data, $code, $header);
    }

    /**
     * 返回封装后的 API 数据到客户端
     *
     * @access protected
     * @param mixed $message 提示信息
     * @param mixed $data 要返回的数据
     * @param int $code 错误码，默认为0
     * @param array $header 发送的 Header 信息
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function result($message, $data = null, $code = 0, array $header = [])
    {
        $result = [
            'code'      => $code,
            'data'      => $data,
            'message'   => $message,
            'time'      => request()->server('REQUEST_TIME'),
        ];
        if (isset($header['statuscode'])) {
            $code = $header['statuscode'];
            unset($header['statuscode']);
        } else {
            //未设置状态码,根据code值判断
            $code = $code >= 1000 || $code < 200 ? 200 : $code;
        }
        return response()->json($result, $code, $header);
    }
}
